package com.shujia.day09;

import java.util.HashSet;

public class Demo10HashSet {
    public static void main(String[] args) {
        /*
            TODO 由于integers数据对其调用HashCode函数得到的结果和数值一样
                    那么在Hash表中存储的位置是根据Hash结果进行定位的,所以相邻的数值存储位置也是相邻的

            TODO  HashSet如何保证元素唯一性
                    底层数据结构是哈希表(元素是链表的数组)
                    哈希表依赖于哈希值存储
                    添加功能底层依赖两个方法：
                        int hashCode()
                        boolean equals(Object obj)
                    如果hashCode相同,那么并不一定说明两个数据就一定一样,( x=数据  y=hashCode)
                            同时在存储时经过取余计算,两个不同的数据也有可能得到相同的位置数据
                            所以需要再通过等值判断

         */
        HashSet<Integer> integers = new HashSet<>();
        integers.add(2);
        integers.add(1);
        integers.add(5);
        integers.add(4);
        integers.add(6);
        System.out.println(integers); // [1, 2, 4, 5, 6]

        HashSet<String> strHash = new HashSet<>();
        strHash.add("11");
        strHash.add("10");
        strHash.add("8");
        strHash.add("0");
        strHash.add("a");
        System.out.println(strHash); // [11, 0, a, 8, 10]

        Integer integer1 = 1;
        Integer integer2 = 2;

        System.out.println(integer1.hashCode()); // 1
        System.out.println(integer2.hashCode()); // 2

    }
}
